iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
自我挑戰組

硬體學習日記系列 第 9

Day-9 verilog介紹-5 expression & assign

  • 分享至 

  • xImage
  •  

今天要來介紹的是表達式~表達式用來做對值的運算,一個表達式包含了變數以及運算符,這在組合邏輯電路和時序邏輯電路的設計裡是重要的部分。

算數表達式

用來執行加減乘除運算。

運算 符號
+
-
*
/
取餘數 %

以verilog寫入的話:

module expression_example(A,B,C);
	input A,B;
	output C;
	reg result;
	
	initial begin
		result = A + B; //加法
        //A-B, A*B, A/B, A%B
	end
	
	assign C = result;
	
endmodule

關係表達式

用來比較兩個值,返回結果的type為bool。

關係 符號
等於 ==
不等於 !=
小於 <
小於等於 <=
大於 >
大於等於 >=

邏輯表達式

用來執行邏輯運算,返回結果的type為bool。

邏輯 符號
邏輯與 &&
邏輯或 ||
邏輯非 !

位移運算表達式

就是對數值做位移操作。

移動 符號 說明
邏輯左移 << 對值乘上2^n, n = 位移量
邏輯右移 >> 對值除以2^n, n = 位移量

條件運算表達式

他的結構是:表達式:( a ? b : c )
其中a為條件,條件成立的狀況下會傳回b,不成立則傳回c。
這邊舉個例子:

module newwork(condition,C);
	input condition;
	output [3:0]C;
	reg [3:0]a,b;
	reg [3:0]result;
	//reg condition;
	
	initial begin
		a = 4'b0101;
		b = 4'b0011;
		result = condition ? a : b;
	end
	
	assign C = result;
	
endmodule

result的值取決於condition,如果condition的值為1,則result的值為a(5);如果condition的值為0,則result的值為b(3),最後再將result傳給C做輸出。

assign

assign的功能之一是賦值到wire(net)型別的訊號。

//assign 基本語法
assign <網路信號> = <表達式>;

//舉例
module expression_example(A,B,C);
	input A,B;
	output C;
	wire a,b,c;
	and( a, A, B ); //a = AB
	and( b, B, C ); //b = BC
	assign c = ~C; //c = C'
	
endmodule

這邊要稍微注意的是,assign只適用在net型別的訊號,無法用在reg的型別,所以assign的等號左式不能放reg的類別喔!而等號的右式可以為reg或net。

且assign的左式不能包含右式存在的訊號,因為assign不存在記憶性,這點跟C有很大的不同。

a = a + b; //C允許,但verilog不行

這裡再舉一個assign的例子:

module expression_example(A,B,C);
	input [3:0] A;
	input [3:0] B;
	output [3:0] C;
	
	assign C = A + B; //加法

endmodule

今天就到這邊~


上一篇
Day-8 verilog介紹-4 logic gate
下一篇
Day-10 verilog介紹-6 always
系列文
硬體學習日記26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言